#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <curl/curl.h>

#define POST_DATA  "{\"deviceSn\":\"bfd2ece82fb95e65\"}"

// gcc -Wall 01_main.c -o a.exe -lcurl

// GET ：  http://120.25.154.190:8081/api/device/getDeviceVersionInfo

// png:  http://www.kaadas.com/vancheerfile/Images/2021/6/20210618174912974.png

//  POST-json  http://39.108.143.63:8001/device/handHeld/findBySn    {“deviceSn”:"bfd2ece82fb95e65"}





int main_post_json()
{

  // 1. 创建一个 curl 句柄

  CURL *curl = NULL;
  CURLcode ret;

  // 2. 初始化一个curl 句柄
  curl = curl_easy_init();


    struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Content-Type: application/json");

  // 3. 给该句柄设定一些参数

  // get 测试
  // curl_easy_setopt(curl, CURLOPT_URL, "http://120.25.154.190:8081/api/device/getDeviceVersionInfo");


  curl_easy_setopt(curl, CURLOPT_URL, "http://39.108.143.63:8001/device/handHeld/findBySn");
  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);


  // post 请求开启
   curl_easy_setopt(curl,CURLOPT_POST, 1);


  //设置 post 数据请求体

  curl_easy_setopt(curl,CURLOPT_POSTFIELDS, POST_DATA);

  // 4. 将crul 句柄 请求远程服务器

  ret = curl_easy_perform(curl);

  if (ret != CURLE_OK)
  {
    // 错误，打印错误码，根据错误码在头文件中找具体问题
    printf("curl easy perfoem error res=%s", curl_easy_strerror(ret));

    return 1;
  }

  //  5. 得到服务器相应，默认答应到控制台

  // 6. 释放句柄空间
  curl_easy_cleanup(curl);

  return 0;
}



/***
 * ptr： 服务器返回的数据的首地址
 * size： 返回每个数据的大小
 *  nmemb： 返回数据的个数， 和write 一样，数据个数* 每个数据大小
 *  回调函数传递的形参
 */ 

size_t write_cal1back(char *ptr,size_t size, size_t nmemb, void *userdata){

    FILE * fp  = (FILE*)userdata; 
    int count = size* nmemb;   //数据长度
    int fwrite_len = 0; //成功写入文件字节
    fwrite_len=  fwrite(ptr,size,nmemb,fp);
    printf("读取的总长度：%d\r\n",count);
    printf("已经写入文件的总长度: %d \r\n",fwrite_len);

    return fwrite_len;
}



// curl -X POST -d "cpuSn=bfd2ece82fb95e65&sn=bfd2ece82fb95e65" http://120.25.154.190:8081/api/deviceInfo/add
//  post-表单  http://120.25.154.190:8081/api/deviceInfo/add     key:cpuSn  value: bfd2ece82fb95e65

int main_post_form(){

 FILE * fp = NULL;
 CURL *curl = NULL;
  CURLcode ret;

 curl = curl_easy_init();
 if(curl ==  NULL){
   return -1;
 }
 fp = fopen("file.txt","w");

  // post 请求开启
   curl_easy_setopt(curl, CURLOPT_URL, "http://120.25.154.190:8081/api/deviceInfo/add");
   curl_easy_setopt(curl,CURLOPT_POST, 1);
   curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "cpuSn=bfd2ece82fb95e65&key2=value2"); // 设置 POST 数据
   curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION, write_cal1back);
   //给回调函数传递一个形参
    curl_easy_setopt(curl,CURLOPT_WRITEDATA, fp);

 // 4. 将crul 句柄 请求远程服务器

  ret = curl_easy_perform(curl);

  if (ret != CURLE_OK)
  {
    // 错误，打印错误码，根据错误码在头文件中找具体问题
    printf("curl easy perfoem error res=%s", curl_easy_strerror(ret));

    return 1;
  }

  //  5. 得到服务器相应，默认答应到控制台

  // 6. 释放句柄空间
  curl_easy_cleanup(curl);

  fclose(fp);


  return 0;
}

int main(){

main_post_form();

  return 0;
}